package controller;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import model.Hauptlagerliste;
import model.Lager;
import model.Materiallagerliste;
import model.Zwischenlagerliste;

public class LagerDateiVerwalter {
	private final String fnLag = ".\\Daten\\Lager.txt";

	public LagerDateiVerwalter() {
		loadLager(fnLag);
	}

	private void loadLager(String fnLag) {
		Hauptlagerliste hauptLagList = Hauptlagerliste.getDieHauptlagerliste();
		List<Integer> ueberlagerArray = new ArrayList<Integer>();
		Materiallagerliste materiallagerliste = Materiallagerliste
				.getDieMateriallagerliste();
		Zwischenlagerliste zwischenlagerliste = Zwischenlagerliste
				.getDieMateriallagerliste();
		File file = new File(fnLag);

		try {

			Scanner datei1 = new Scanner(file);
			while (datei1.hasNextLine()) {
				try {
					String datenSatz = datei1.nextLine();
					Scanner sc = new Scanner(datenSatz).useDelimiter(";");
					sc.nextInt();
					sc.next();

					int ueberlager = sc.nextInt();
					// if (ueberlager != 0) {
					ueberlagerArray.add(ueberlager);
					// }
				} catch (NumberFormatException e) {
					e.printStackTrace();
				}
			}
			System.out.println(ueberlagerArray);

		} catch (FileNotFoundException e) {
			System.out.printf("Datei <%s> nicht gefunden!\n", fnLag);
			// e.printStackTrace();
		}

		try {

			Scanner datei = new Scanner(file);
			while (datei.hasNextLine()) {
				try {
					Lager l = new Lager();
					String datenSatz = datei.nextLine();
					Scanner sc = new Scanner(datenSatz).useDelimiter(";");
					l.setId(sc.nextInt());

					l.setName(sc.next());
					int ueberlager = sc.nextInt();
					l.setUeberLager(ueberlager);
					boolean materiallager = true;
					for (Integer integer : ueberlagerArray) {
						if (l.getId() == integer) {
							materiallager = false;
						}

					}
					if (materiallager == true)
						materiallagerliste.add(l);

					if (l.getUeberLager() == 0) {
						hauptLagList.add(l);
					} 

					else {
						zwischenlagerliste.add(l);
						for (int i = 0; i < hauptLagList.size(); i++) {
							if (hauptLagList.get(i).getId() == l
									.getUeberLager()) {
								hauptLagList.get(i).getUnterLag().getLag()
										.add(l);
							} else {
								for (int j = 0; j < hauptLagList.get(i)
										.getUnterLag().getLag().size(); j++) {
									if (hauptLagList.get(i).getUnterLag()
											.getLag().get(j).getId() == l
											.getUeberLager()) {
										hauptLagList.get(i).getUnterLag()
												.getLag().get(j).getUnterLag()
												.getLag().add(l);
									} else {

									}
								}
							}
						}
					}
				} catch (NumberFormatException e) {
					e.printStackTrace();
				}
			}

		} catch (FileNotFoundException e) {
			System.out.printf("Datei <%s> nicht gefunden!\n", fnLag);
			// e.printStackTrace();
		}
	}

	private void neuLager(String fnLag) {

		int id;
		String name;
		int bestand;
		int ueberLager;

		id = 1;

		File file = new File(fnLag);
		try {
			Scanner datei = new Scanner(file);
			while (datei.hasNextLine()) {
				try {
					String datenSatz = datei.nextLine();
					Scanner sc = new Scanner(datenSatz).useDelimiter(";");
					id = (sc.nextInt());
				} catch (NumberFormatException e) {
					e.printStackTrace();
				}
			}
		} catch (FileNotFoundException e) {
			System.out.printf("Datei <%s> nicht gefunden!\n", fnLag);
			// e.printStackTrace();
		}

		id++;
		name = "Test23";
		bestand = 209;
		ueberLager = 1;

		BufferedWriter out;
		try {
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(fnLag, true)));
			try {
				out.newLine();
				out.write(id + ";" + name + ";" + bestand + ";" + ueberLager);
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}